import Vue from "vue";
import ElementUI from "element-ui";
import Swal from "sweetalert2";
import * as echarts from "echarts";

import enumsFilter from "../public/base/js/module/enumsFilter";
Vue.use(ElementUI);
Vue.prototype.$Swal=Swal;
Vue.prototype.$echarts=echarts;
//阻止显示生产模式的消息
Vue.config.productionTip = false

import App from './App'
//引入router必须小写首字母
import router from "./router";
import axios from "axios";
//解决前后端分离，每次请求sessionId不同（验证码+登录问题，需要相同验证码）
axios.defaults.withCredentials = true;

//增加事件总线，需要登录的请求-》登录拦截
Vue.prototype.$event=new Vue();

/*
axios拦截日志:
失败：获取router--> index.js中定义的全局变量$axios
成功：需要在本文件再次引入
 */

axios.interceptors.request.use(function (config) {
    //console.log("发出请求：", config);
    /** 增加登录token的获取
     *
     */
    let token=Tool.getEmpLogin().token;
    //console.log("axios拦截获取session的token：",token);
    if(Tool.isNotEmpty(token)){
        //配置请求头携带token
        config.headers.token=token;
        //console.log("请求头获取缓存token：",token);
    }

    return config;
}, error => {

});
axios.interceptors.response.use(function (response) {
    //console.log("返回结果：", response);
    return response;
}, error => {
    //console.log("请求超时，请重新登录: ",error.response);
    let resp=error.response;
    let status=resp.status;
    //登录超时或无权限访问
    if(status===401){
        console.log("暂无访问权限，请重新登录!");
        Tool.setEmpLogin(null);
        router.push('/login');
    }
    return{
        //模拟后端响应结果
        data:{
            success:false,
            message:'暂无访问权限，请重新登录!'
        }
    }
});

//增加enumsFilter全局过滤器(js)：用于下拉框的显示效果
Object.keys(enumsFilter).forEach(key => {
    Vue.filter(key, enumsFilter[key]);
});

/**vue路由：登录拦截携带loginDto的token：钩子函数
 * 引用main.js在admin父组件定义的meta：loginRequired=true
 * 注意判断token*/
router.beforeEach((to, from, next) => {
    //对admin的meta属性监控
    if (to.matched.some(function (item) {
        //loginRequired=true，向下执行，跳转to页面，false直接else
        return item.meta.loginRequired;
    })) {
        let loginEmp = Tool.getEmpLogin();
        if (Tool.isEmpty(loginEmp)) {
            next('/login');
        } else {
            next();
        }
    } else {
        next();
    }
});

new Vue({
    router,
    render: h => h(App),
}).$mount('#app')
//使用全局环境变量：process.env.*
//console.log("全局dev/prod环境配置: ", process.env.NODE_ENV);
//console.log("全局dev/prod环境前缀: ", process.env.VUE_APP_SERVER);
